/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servlets;

import acteur.gestionnaires.GestionnaireActeur;
import acteur.modeles.Acteur;
import dvd.gestionnaires.GestionnaireDvd;
import java.io.IOException;
import java.util.Collection;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import dvd.modeles.Dvd;
import javax.servlet.RequestDispatcher;
import java.util.ArrayList;  
import java.util.List;
import realisateur.modeles.Realisateur;
import realisateur.gestionnaires.GestionnaireRealisateur;

/**
 *
 * @author Marcouss&Ln
 */
@WebServlet(name = "ServletDvd", urlPatterns = {"/ServletDvd"})
public class ServletDvd extends HttpServlet {
    @EJB
    private GestionnaireDvd gestionnaireDvd;
    @EJB
    private GestionnaireRealisateur gestionnaireRealisateurs;
    @EJB
    private GestionnaireActeur gestionnaireActeurs;
    int page = 1;
    int pageTotal =1;
    boolean hideNext=true;
    boolean hidePrev=true;
    
    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String action = request.getParameter("action");
        String genre = request.getParameter("genre");
        String nom = request.getParameter("nom");
        HttpSession session = request.getSession(true);
        session.setAttribute("page",""+page);
        session.setAttribute("pageTot",""+pageTotal);
        session.setAttribute("hideNext", hideNext);
        session.setAttribute("hidePrev", hidePrev);
        
        String forwardTo = "";  
        String message = "";
        
        if (action != null) {
                System.out.println("finis" + "bugg333"); 
            if (action.equals("AfficherDvd")) { 
                Collection<Dvd> liste = gestionnaireDvd.getAllDvd(5,page);
                pageTotal = gestionnaireDvd.getPageTotal()/5+1;
                if(pageTotal==1){
                    hideNext=true;
                    hidePrev=true;
                }
                else if(page==1){
                    hidePrev=true;
                    hideNext=false;
                }
                session.setAttribute("hideNext",hideNext);
                session.setAttribute("hidePrev",hidePrev);
                session.setAttribute("pageTot", ""+pageTotal);
                
                request.setAttribute("listeDvd", liste); 
                System.out.println("finis" + "buggin number222");
                forwardTo = "lesDvd.jsp?action=AfficherDvd"; 
            }
            else if (action.equals("RechercherDvd")) { 
                String text = request.getParameter("RechercherDvd");
                System.out.println(text);
                String carac = request.getParameter("Liste");
                System.out.println(carac);
                Collection<Dvd> liste;
                if(carac.equals("none") || text.equals("")){
                    forwardTo = "lesDvd.jsp?action=AfficherDvd?message=NotFound";
                }
                if(carac.equals("listeActeur")){
                    liste = gestionnaireDvd.getDvdByActor(text);
                }else if (carac.equals("listeRealisateur")){
                    liste = gestionnaireDvd.getDvdByDirector(text);
                }else if (carac.equals("annee")){
                    liste = gestionnaireDvd.getDvdByYear(text);
                }else{
                    liste = gestionnaireDvd.getDvdBy(text, carac);
                }
                
                
                if(liste.isEmpty()){
                    forwardTo = "lesDvd.jsp?action=NotFound";
                }
                pageTotal = gestionnaireDvd.getPageTotal()/5+1;
                if(pageTotal==1){
                    hideNext=true;
                    hidePrev=true;
                }
                else if(page==1){
                    hidePrev=true;
                    hideNext=false;
                }
                session.setAttribute("hideNext",hideNext);
                session.setAttribute("hidePrev",hidePrev);
                session.setAttribute("pageTot", ""+pageTotal);
                
                request.setAttribute("listeDvd", liste); 
                System.out.println("finis" + "buggin number222");
                forwardTo = "lesDvd.jsp?action=AfficherDvd"; 
            }
            
            else if (action.equals("AfficherDvdGenre")) {
                System.out.println(genre);
                Collection<Dvd> liste = gestionnaireDvd.getDvdGenre(genre);
                System.out.println(liste);
                
                request.setAttribute("listeDvd", liste); 
                forwardTo = "lesDvd.jsp?action=AfficherDvd";    
            }
            
            else if (action.equals("AfficherDvdTitre")) {
                System.out.println(nom);
                Collection<Dvd> liste = gestionnaireDvd.getDvdTitre(nom);;
                
                request.setAttribute("listeDvd", liste); 
                forwardTo = "lesDvd.jsp?action=AfficherDvd";    
            }
            
            else if (action.equals("addDvd")) {
                System.out.println("in add Dvd");
                gestionnaireRealisateurs.peupleLaBaseRealAvecJeuDeTest();
                gestionnaireActeurs.peupleLaBaseActAvecJeuDeTest();
                //gestionnaireDvd.peupleLaBaseDvdAvecJeuDeTest();
                
                
                /**
                 * Création d'une liste de Collection de Réalisateur.
                 * On passera cette liste en paramètre à la création des Dvd.
                 *
                 */
                
                List<Collection<Realisateur>> cr = new ArrayList<Collection<Realisateur>>();
                
                ArrayList<Realisateur> cr1 = new ArrayList<Realisateur>();
                cr1.add(gestionnaireRealisateurs.getRealisateur("Wachowski", "Andy"));
                cr1.add(gestionnaireRealisateurs.getRealisateur("Wachowski", "Larry"));
                
                ArrayList<Realisateur> cr2 = new ArrayList<Realisateur>();
                cr2.add(gestionnaireRealisateurs.getRealisateur("Lucas", "Georges"));
                
                ArrayList<Realisateur> cr3 = new ArrayList<Realisateur>();
                cr3.add(gestionnaireRealisateurs.getRealisateur("Kershner", "Irvin"));
                
                ArrayList<Realisateur> cr4 = new ArrayList<Realisateur>();
                cr4.add(gestionnaireRealisateurs.getRealisateur("Marquand", "Richard"));
                
                ArrayList<Realisateur> cr5 = new ArrayList<Realisateur>();
                cr5.add(gestionnaireRealisateurs.getRealisateur("Cameron", "James"));
                
                ArrayList<Realisateur> cr6 = new ArrayList<Realisateur>();
                cr6.add(gestionnaireRealisateurs.getRealisateur("Fletcher", "Anne"));
                
                ArrayList<Realisateur> cr7 = new ArrayList<Realisateur>();
                cr7.add(gestionnaireRealisateurs.getRealisateur("Peli", "Oren"));
                
                ArrayList<Realisateur> cr8 = new ArrayList<Realisateur>();
                cr8.add(gestionnaireRealisateurs.getRealisateur("Sonnenfeld", "Barry"));
                
                ArrayList<Realisateur> cr9 = new ArrayList<Realisateur>();
                cr9.add(gestionnaireRealisateurs.getRealisateur("Wedge", "Chris"));
                cr9.add(gestionnaireRealisateurs.getRealisateur("Saldanha", "Carlos"));
                
                ArrayList<Realisateur> cr10 = new ArrayList<Realisateur>();
                cr10.add(gestionnaireRealisateurs.getRealisateur("Adamson", "Andrew"));
                cr10.add(gestionnaireRealisateurs.getRealisateur("Jenson", "Victoria"));
                
                ArrayList<Realisateur> cr11 = new ArrayList<Realisateur>();
                cr11.add(gestionnaireRealisateurs.getRealisateur("Forman", "Milos"));
                
                ArrayList<Realisateur> cr12 = new ArrayList<Realisateur>();
                cr12.add(gestionnaireRealisateurs.getRealisateur("Redford", "Robert"));
                
                ArrayList<Realisateur> cr13 = new ArrayList<Realisateur>();
                cr13.add(gestionnaireRealisateurs.getRealisateur("Darabont", "Frank"));
                
                ArrayList<Realisateur> cr14 = new ArrayList<Realisateur>();
                cr14.add(gestionnaireRealisateurs.getRealisateur("Bay", "Michael"));
                
                ArrayList<Realisateur> cr15 = new ArrayList<Realisateur>();
                cr15.add(gestionnaireRealisateurs.getRealisateur("Besson", "Luc"));
                
                ArrayList<Realisateur> cr16 = new ArrayList<Realisateur>();
                cr16.add(gestionnaireRealisateurs.getRealisateur("Peterson", "Wolfgang"));
                
                cr.add(cr1);cr.add(cr2);cr.add(cr3);cr.add(cr4);cr.add(cr5);cr.add(cr6);cr.add(cr7);cr.add(cr8);cr.add(cr9);
                cr.add(cr10);cr.add(cr11);cr.add(cr12);cr.add(cr13);cr.add(cr14);cr.add(cr15);cr.add(cr16);
                        
                
                /**
                 * Création d'une liste de Collection d'Acteur.
                 * On passera cette liste en paramètre à la création des Dvd.
                 *
                 */
                
                List<Collection<Acteur>> ca = new ArrayList<Collection<Acteur>>();
                
                ArrayList<Acteur> ca1 = new ArrayList<Acteur>();
                ca1.add(gestionnaireActeurs.getActeur("Reeves", "Keanu"));
                ca1.add(gestionnaireActeurs.getActeur("Fishburne", "Laurence"));
                ca1.add(gestionnaireActeurs.getActeur("Moss", "Carrie-Anne"));
                
                ArrayList<Acteur> ca2 = new ArrayList<Acteur>();
                ca2.add(gestionnaireActeurs.getActeur("Neeson", "Liam"));
                ca2.add(gestionnaireActeurs.getActeur("McGregor", "Ewan"));
                ca2.add(gestionnaireActeurs.getActeur("Portman", "Natalie"));
                
                ArrayList<Acteur> ca3 = new ArrayList<Acteur>();
                ca3.add(gestionnaireActeurs.getActeur("Hamill", "Mark"));
                ca3.add(gestionnaireActeurs.getActeur("Ford", "Harrison"));
                ca3.add(gestionnaireActeurs.getActeur("Fisher", "Carrie"));  
                
                ArrayList<Acteur> ca4 = new ArrayList<Acteur>();
                ca4.add(gestionnaireActeurs.getActeur("Worthington", "Sam"));
                ca4.add(gestionnaireActeurs.getActeur("Saldana", "Zoe"));
                ca4.add(gestionnaireActeurs.getActeur("Weaver", "Sigourney")); 
                
                ArrayList<Acteur> ca5 = new ArrayList<Acteur>();
                ca5.add(gestionnaireActeurs.getActeur("Tatum", "Channing"));
                ca5.add(gestionnaireActeurs.getActeur("Dewan", "Jenna"));
                ca5.add(gestionnaireActeurs.getActeur("Radcliff", "Damaine"));  
                
                ArrayList<Acteur> ca6 = new ArrayList<Acteur>();
                ca6.add(gestionnaireActeurs.getActeur("Featherston", "Katie"));
                ca6.add(gestionnaireActeurs.getActeur("Sloat", "Micah")); 
                
                ArrayList<Acteur> ca7 = new ArrayList<Acteur>();
                ca7.add(gestionnaireActeurs.getActeur("Smith", "Will"));
                ca7.add(gestionnaireActeurs.getActeur("Lee Jones", "Tommy")); 
                
                ArrayList<Acteur> ca8 = new ArrayList<Acteur>();
                ca8.add(gestionnaireActeurs.getActeur("Leary", "Denis"));
                ca8.add(gestionnaireActeurs.getActeur("Romano", "Ray"));
                ca8.add(gestionnaireActeurs.getActeur("Leguizamo", "John"));  
                
                ArrayList<Acteur> ca9 = new ArrayList<Acteur>();
                ca9.add(gestionnaireActeurs.getActeur("Myers", "Mike"));
                ca9.add(gestionnaireActeurs.getActeur("Murphy", "Eddie"));
                ca9.add(gestionnaireActeurs.getActeur("Diaz", "Cameron"));  
                
                ArrayList<Acteur> ca10 = new ArrayList<Acteur>();
                ca10.add(gestionnaireActeurs.getActeur("Berryman", "Michael"));
                ca10.add(gestionnaireActeurs.getActeur("Nicholson", "Jack")); 
                
                ArrayList<Acteur> ca11 = new ArrayList<Acteur>();
                ca11.add(gestionnaireActeurs.getActeur("Redford", "Robert"));
                ca11.add(gestionnaireActeurs.getActeur("Scott Thomas", "Kristin"));
                ca11.add(gestionnaireActeurs.getActeur("Johansson", "Scarlett")); 
                
                ArrayList<Acteur> ca12 = new ArrayList<Acteur>();
                ca12.add(gestionnaireActeurs.getActeur("Hanks", "Tom"));
                ca12.add(gestionnaireActeurs.getActeur("Morse", "David")); 
                
                ArrayList<Acteur> ca13 = new ArrayList<Acteur>();
                ca13.add(gestionnaireActeurs.getActeur("Willis", "Bruce"));
                ca13.add(gestionnaireActeurs.getActeur("Affleck", "Ben"));
                ca13.add(gestionnaireActeurs.getActeur("Tyler", "Liv"));   
                
                ArrayList<Acteur> ca14 = new ArrayList<Acteur>();
                ca14.add(gestionnaireActeurs.getActeur("Willis", "Bruce"));
                ca14.add(gestionnaireActeurs.getActeur("Jovovich", "Milla")); 
                
                ArrayList<Acteur> ca15 = new ArrayList<Acteur>();
                ca15.add(gestionnaireActeurs.getActeur("Pitt", "Brad"));
                ca15.add(gestionnaireActeurs.getActeur("Bloom", "Orlando"));
                ca15.add(gestionnaireActeurs.getActeur("Kruger", "Diane")); 
                
                ArrayList<Acteur> ca16 = new ArrayList<Acteur>();
                ca16.add(gestionnaireActeurs.getActeur("Affleck", "Ben"));
                ca16.add(gestionnaireActeurs.getActeur("Hartnett", "Josh"));
                ca16.add(gestionnaireActeurs.getActeur("Beckinsale", "Kate"));       
                        
                ca.add(ca1);ca.add(ca2);ca.add(ca3);ca.add(ca4);ca.add(ca5);ca.add(ca6);ca.add(ca7);ca.add(ca8);ca.add(ca9);
                ca.add(ca10);ca.add(ca11);ca.add(ca12);ca.add(ca13);ca.add(ca14);ca.add(ca15);ca.add(ca16);
                        
                //Collection<Realisateur> cr1 = gestionnaireRealisateurs.getAllRealisateur();
                //Collection<Acteur> ac1 = gestionnaireActeurs.getAllActeur();
                gestionnaireDvd.creerDvdTest(cr, ca);
                
                
               
                Collection<Dvd> liste = gestionnaireDvd.getAllDvd(5,page);
                request.setAttribute("listeDvd", liste);
                forwardTo = "lesDvd.jsp?action=AfficherDvd";
                
            }
            
            
            else if (action.equals("NextPage")){  
                page +=1;
                if(page==pageTotal){
                    hideNext = true;
                    session.setAttribute("hideNext",hideNext);
                }
                hidePrev=false;
                session.setAttribute("hidePrev",hidePrev);
                session.setAttribute("page",""+page);
                Collection<Dvd> liste = gestionnaireDvd.getAllDvd(5, page);
                
                request.setAttribute("listeDvd", liste); 
                forwardTo = "lesDvd.jsp?action=AfficherDvd";
            }
            else if (action.equals("PrevPage")){  
                
                page -=1;
                if(page==1){
                    hidePrev = true;
                    hideNext = false;
                    session.setAttribute("hidePrev",hidePrev);
                    session.setAttribute("hideNext",hideNext);
                }
                session.setAttribute("page",""+page);
                Collection<Dvd> liste = gestionnaireDvd.getAllDvd(5, page);
                request.setAttribute("listeDvd", liste);
                forwardTo = "lesDvd.jsp?action=AfficherDvd";
                
            }
            
            
            
            
        }
        else{
        RequestDispatcher dp = request.getRequestDispatcher(forwardTo);  
        dp.forward(request, response); 
        }
        RequestDispatcher dp = request.getRequestDispatcher(forwardTo);  
        dp.forward(request, response);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}